CC = gcc
CXX = g++
FC = gfortran

FFLAGS = -O2 -fbounds-check -Wall -Wno-conversion
CFLAGS = -O2 -I. 

# Default rules
%.o: %.c
	${CC} ${CFLAGS} -c $<
%.o: %.f
	${FC} ${FFLAGS} -c $<
%.o: %.F
	${FC} ${FFLAGS} -c $<
%.o: %.f90
	${FC} ${FFLAGS} -c $<
%.o: %.F90
	${FC} ${FFLAGS} -c $<

#all:	 qratest.exe tplt.exe
all:    qra64d.exe

OBJS1 = qratest.o qra64a.o ana64.o sync64a.o four2a.o smo.o smo121.o averms.o \
	timer_module.o packjt.o twkfreq.o spec64.o fmtmsg.o pctile.o \
	grid2deg.o deg2grid.o shell.o badmsg.o qra64_subs.o \
	qracodes.o npfwht.o pdmath.o qra12_63_64_irr_b.o \
	qra13_64_64_irr_e.o qra64.o image.o \
	zplt64a.o zplt64b.o lorentzian.o fchisq0.o peakup.o sync64.o

qra64_subs.o: qra/qra64/qra64_subs.c
	gcc -c -O2 -o qra64_subs.o qra/qra64/qra64_subs.c

qracodes.o: qra/qracodes/qracodes.c
	gcc -c -O2 -o qracodes.o qra/qracodes/qracodes.c

qra64.o: qra/qra64/qra64.c
	gcc -c -O2 -o qra64.o qra/qra64/qra64.c

npfwht.o: qra/qracodes/npfwht.c
	gcc -c -O2 -o npfwht.o qra/qracodes/npfwht.c

pdmath.o: qra/qracodes/pdmath.c
	gcc -c -O2 -o pdmath.o qra/qracodes/pdmath.c

qra12_63_64_irr_b.o: qra/qracodes/qra12_63_64_irr_b.c
	gcc -c -O2 -o qra12_63_64_irr_b.o  qra/qracodes/qra12_63_64_irr_b.c

qra13_64_64_irr_e.o: qra/qracodes/qra13_64_64_irr_e.c
	gcc -c -O2 -o qra13_64_64_irr_e.o  qra/qracodes/qra13_64_64_irr_e.c

qratest.exe: $(OBJS1)
	$(FC) -o qratest.exe $(OBJS1) C:\JTSDK\fftw3f\libfftw3f-3.dll

OBJS2 = tplt.o zplt64.o image.o
tplt.exe: $(OBJS2)
	$(FC) -o tplt.exe $(OBJS2)

OBJS3 = qra64d.o sync64a.o four2a.o smo.o smo121.o averms.o \
	timer_module.o packjt.o twkfreq.o spec64.o fmtmsg.o pctile.o \
	grid2deg.o deg2grid.o shell.o badmsg.o qra64_subs.o \
	qracodes.o npfwht.o pdmath.o qra12_63_64_irr_b.o \
	qra13_64_64_irr_e.o qra64.o image.o \
	zplt64a.o zplt64b.o lorentzian.o fchisq0.o peakup.o sync64.o

qra64d.exe: $(OBJS3)
	$(FC) -o qra64d.exe $(OBJS3) C:\JTSDK\fftw3f\libfftw3f-3.dll

.PHONY : clean

clean:
	$(RM) *.o qratest.exe tplt.exe
